/*
 * DialogoProbabilidades.cpp
 *      Author: sebastian
 */

#include "DialogoProbabilidades.h"

DialogoProbabilidades::DialogoProbabilidades(const Glib::RefPtr<Gtk::Builder>& builder){
	builder->get_widget("boxDialogo",box);
	spinProbabilidades = new std::map<int,Gtk::SpinButton*>;
	builder->get_widget("checkEsAgujero",esAgujero);
	clickAguj = esAgujero->get_active();
	builder->get_widget("dialog1",dialogo);
	puedeSerAgujero = true;
	Gtk::SpinButton* auxiliar = 0;
	builder->get_widget("spinAmarillo",auxiliar);
	(*spinProbabilidades)[spinAmarillo] = auxiliar;
	builder->get_widget("spinAzul",auxiliar);
	(*spinProbabilidades)[spinAzul] = auxiliar;
	builder->get_widget("spinRojo",auxiliar);
	(*spinProbabilidades)[spinRojo] = auxiliar;
	builder->get_widget("spinVerde",auxiliar);
	(*spinProbabilidades)[spinVerde] = auxiliar;
	builder->get_widget("spinVioleta",auxiliar);
	(*spinProbabilidades)[spinVioleta] = auxiliar;
	builder->get_widget("spinMBVAmarilla",auxiliar);
	(*spinProbabilidades)[spinMBVAmarilla] = auxiliar;
	builder->get_widget("spinMBVAzul",auxiliar);
	(*spinProbabilidades)[spinMBVAzul] = auxiliar;
	builder->get_widget("spinMBVRoja",auxiliar);
	(*spinProbabilidades)[spinMBVRoja] = auxiliar;
	builder->get_widget("spinMBVVerde",auxiliar);
	(*spinProbabilidades)[spinMBVVerde] = auxiliar;
	builder->get_widget("spinMBVVioleta",auxiliar);
	(*spinProbabilidades)[spinMBVVioleta] = auxiliar;
	builder->get_widget("spinMBHAmarilla",auxiliar);
	(*spinProbabilidades)[spinMBHAmarilla] = auxiliar;
	builder->get_widget("spinMBHAzul",auxiliar);
	(*spinProbabilidades)[spinMBHAzul] = auxiliar;
	builder->get_widget("spinMBHRoja",auxiliar);
	(*spinProbabilidades)[spinMBHRoja] = auxiliar;
	builder->get_widget("spinMBHVerde",auxiliar);
	(*spinProbabilidades)[spinMBHVerde] = auxiliar;
	builder->get_widget("spinMBHVioleta",auxiliar);
	(*spinProbabilidades)[spinMBHVioleta] = auxiliar;
	builder->get_widget("spinEstrella",auxiliar);
	(*spinProbabilidades)[spinEstrella] = auxiliar;
}

DialogoProbabilidades::~DialogoProbabilidades() {
	if (spinProbabilidades != 0) delete spinProbabilidades;

}

int DialogoProbabilidades::deolverSumaProbabilidades(){
	int suma = 0;
	for (std::map<int,Gtk::SpinButton*>::iterator it =
			spinProbabilidades->begin(); it!=spinProbabilidades->end(); ++it){
		suma += it->second->get_value_as_int();
	}
	return suma;
}

bool DialogoProbabilidades::show(){
	mostrarOcultarAgujero();
	bool salir = false;
	bool estaOK = false;
	while (!salir){
		int resultado = dialogo->run();
		if (resultado == Gtk::RESPONSE_ACCEPT){
			int suma = 0;
			if ( (suma = deolverSumaProbabilidades()) == 100 || esAgujero->get_active() ) {
				salir = true;
				estaOK = true;
			} else {
				std::stringstream s;
				s << "Error, la suma no da 100, da = " << suma;
				Gtk::MessageDialog auxiliar(s.str());
				auxiliar.run();
			}
		} else {
			salir = true;
		}
	}
	dialogo->hide();
	return estaOK;
}

std::map<int,Gtk::SpinButton*>& DialogoProbabilidades::getSpinProbabilidades(){
	return *spinProbabilidades;
}

void DialogoProbabilidades::setearValores(std::map<int,int>& proba, bool click){
	std::map<int,int>::iterator iteradorDeMisProbabilidades = proba.begin();
	for (std::map<int,Gtk::SpinButton*>::iterator it =spinProbabilidades->begin(); it!=spinProbabilidades->end(); ++it){
		it->second->set_value(iteradorDeMisProbabilidades->second);
		iteradorDeMisProbabilidades++;
	}
	this->clickAguj = click;
	esAgujero->set_active(clickAguj);
	mostrarOcultarAgujero();
}

void DialogoProbabilidades::mostrarOcultarAgujero(){
	if(puedeSerAgujero) {
		esAgujero->show();
	} else {
		esAgujero->hide();
	}
}
bool DialogoProbabilidades::getClickAguj(){
	return esAgujero->get_active();
}

void DialogoProbabilidades::verCheckAgujero(bool estado){
	puedeSerAgujero = estado;
}

